#include "../mt.h"

void Error(const char* msg)
{
	perror(msg);
	exit(1);
}

int main(int argc, char** argv)
{
	if (argc<2) Error("Error: tenes que pasar como parametro la IP del servidor");
	
	int sock_fd;
	char str[MAX_MSG_LENGTH];
	memset(str,0,MAX_MSG_LENGTH);

	/* Abro un socket para el cliente */

	if( (sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1 )
		Error("Error creando socket");

	/* Defino la direccion del servidor */

	struct sockaddr_in server_addr;
	bzero((char *) &server_addr, sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(PORT);
	if( (inet_aton((const char*)argv[1],&server_addr.sin_addr))==0 )
		Error("Error generando IP");

	socklen_t addr_size = sizeof(server_addr);

	/* Me conecto al servidor */

	if (connect(sock_fd,(const struct sockaddr*)&server_addr,sizeof(server_addr)) < 0)
		Error("Conectandose a socket");

	/* Loop principal */

	int quit=0;
	while(!quit && printf("> ") && fgets(str, MAX_MSG_LENGTH, stdin) && !feof(stdin))
	{
		/* Envio el comando al servidor */
		
		ssize_t size=sendto(sock_fd,str,strlen(str),0,(const struct sockaddr*)&server_addr,addr_size);

		if(strncmp(str,END_STRING,MAX_MSG_LENGTH)==0) quit=1;
		else{

			if( size==-1 ) Error("Error enviando mensaje");
			else memset(str,0,size);

			/* Espero y recibo la respuesta del servidor */

			size = read(sock_fd, str, MAX_MSG_LENGTH);
			
			if (size<0) Error("Error leyendo respuesta");

			/* Imprimo la respuesta en pantalla */
		
			printf("Respuesta:\n%s", str);
			memset(str,0,size);
		}
	}

	close(sock_fd);
	return 0;
}
